Skip to content

feat(open): add 'open vscode' and 'open ssms', remove retired 'open ads'#688

Open
dlevy-msft-sql wants to merge 66 commits into
microsoft:mainfrom
dlevy-msft-sql:pr-685
Open

feat(open): add 'open vscode' and 'open ssms', remove retired 'open ads'#688
dlevy-msft-sql wants to merge 66 commits into
microsoft:mainfrom
dlevy-msft-sql:pr-685

Conversation

@dlevy-msft-sql
Copy link
Copy Markdown
Contributor

@dlevy-msft-sql dlevy-msft-sql commented Feb 1, 2026

Summary

Adds two new subcommands and removes one that no longer applies:

  • sqlcmd open vscode — writes a connection profile for the current context into VS Code's settings.json and launches VS Code on it via the vscode:// URL handler (which prompts to install the MSSQL extension on first use if needed).
  • sqlcmd open ssms — launches SSMS connected to the current context (Ssms.exe -S host,port -nosplash [-C] [-U user] with the password handed off via the clipboard).
  • sqlcmd open ads is removed: Azure Data Studio was retired in August 2025.

Password handling for VS Code

The VS Code profile includes the SQL password inline in settings.json rather than prompting the user for it. sqlcmd's containers are short-lived local development instances with throwaway credentials, and the goal of open vscode is one-shot, zero-prompt connect. The MSSQL extension migrates the password out of settings.json and into the OS credential store on first read, so the on-disk window is brief; we accept that trade-off in exchange for not requiring the user to paste a password they did not choose. This applies only to the local-container dev flow; users connecting to real servers should manage credentials through the extension directly.

Editor discovery (Windows)

  • VS Code: PATH (code / code-insiders) → Inno Setup uninstall registry → default install dirs. --build stable|insiders selects which build to launch; the connection profile is written to that build's settings.json so the profile and the launched build always match.
  • SSMS: vswhere -products Microsoft.VisualStudio.Product.Ssms, which finds SSMS 21+ on any drive. --version pins a major version; values below 21 are rejected (older SSMS releases are legacy-MSI and aren't registered with the VS Installer).

Why not ssms://?

An earlier revision used the ssms:// protocol handler. Its grammar only accepts s/a/u/d/h/q/dn and silently drops -C (trust server certificate) and -P. Local container connections need -C, so the URL path could not connect to a fresh local SQL container regardless of SSMS version. That commit was reverted; the argv launch path is what ships.

Testing

  • go build ./... on windows/linux/darwin
  • go test ./internal/tools/tool/... ./cmd/modern/root/open/...
  • New unit tests cover: vswhere arg construction and output parsing, SSMS install resolution, VS Code build selection, per-build settings.json routing.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds support for opening Visual Studio Code and SQL Server Management Studio (SSMS) to work with SQL Server connections managed by sqlcmd, addressing the deprecation of Azure Data Studio. The implementation uses clipboard-based password sharing since both tools use sandboxed credential storage.

Changes:

  • Adds sqlcmd open vscode command that creates connection profiles in VS Code settings and auto-installs the MSSQL extension
  • Adds sqlcmd open ssms command (Windows-only) that launches SSMS with pre-configured connection parameters
  • Implements cross-platform clipboard support for secure password sharing
  • Includes comprehensive tests and documentation updates

Reviewed changes

Copilot reviewed 30 out of 31 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
cmd/modern/root/open.go Updates open command to include VSCode and SSMS subcommands
cmd/modern/root/open/vscode.go Main VSCode command implementation with settings file manipulation
cmd/modern/root/open/vscode_*.go Platform-specific VSCode implementations
cmd/modern/root/open/ssms.go Main SSMS command implementation
cmd/modern/root/open/ssms_*.go Platform-specific SSMS implementations (Fatal on non-Windows)
cmd/modern/root/open/clipboard.go Helper function for clipboard-based password sharing
cmd/modern/root/open/*_test.go Comprehensive test coverage for new commands
internal/tools/tool/vscode*.go VSCode tool detection and configuration
internal/tools/tool/ssms*.go SSMS tool detection and configuration
internal/pal/clipboard*.go Cross-platform clipboard implementation using native APIs
internal/tools/tools.go Registers VSCode and SSMS tools
README.md Adds clear documentation with usage examples
.gitignore Adds /modern build artifact

Comment thread cmd/modern/root/open/vscode.go Outdated
Comment thread cmd/modern/root/open/ssms.go Outdated
Comment thread cmd/modern/root/open/vscode.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 30 out of 31 changed files in this pull request and generated 9 comments.

Comment thread cmd/modern/root/open/ssms_unix.go
Comment thread cmd/modern/root/open/vscode.go Outdated
Comment thread cmd/modern/root/open/ssms.go Outdated
Comment thread cmd/modern/root/open/ssms.go Outdated
Comment thread cmd/modern/root/open/vscode_test.go Outdated
Comment thread cmd/modern/root/open/ssms_test.go Outdated
Comment thread cmd/modern/root/open/ssms_darwin.go Outdated
Comment thread cmd/modern/root/open/vscode.go Outdated
Comment thread cmd/modern/root/open/vscode.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 30 out of 31 changed files in this pull request and generated 1 comment.

Comment thread cmd/modern/root/open/vscode.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 30 out of 31 changed files in this pull request and generated 1 comment.

Comment thread cmd/modern/root/open/vscode.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 32 out of 33 changed files in this pull request and generated 3 comments.

Comment thread cmd/modern/root/open/vscode.go Outdated
Comment thread internal/tools/tool/vscode_linux.go
Comment thread README.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 33 out of 34 changed files in this pull request and generated 1 comment.

Comment thread cmd/modern/root/open/ssms.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 33 out of 34 changed files in this pull request and generated 2 comments.

Comment thread cmd/modern/root/open/vscode.go Outdated
Comment thread cmd/modern/root/open/ssms.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 33 out of 34 changed files in this pull request and generated 4 comments.

Comment thread internal/tools/tool/tool.go Outdated
Comment thread cmd/modern/root/open.go Outdated
Comment thread cmd/modern/root/open/ssms.go Outdated
Comment thread cmd/modern/root/open/vscode.go Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 74 changed files in this pull request and generated 1 comment.

Comment thread cmd/modern/root/open/vscode.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 74 changed files in this pull request and generated 1 comment.

Comment thread cmd/modern/root/open/vscode.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 74 changed files in this pull request and generated 1 comment.

Comment thread internal/pal/clipboard_windows.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 74 changed files in this pull request and generated no new comments.

Removes the mssql.connections entry (and any inline password persisted for container-backed endpoints) from both stable and insiders VS Code settings.json when the underlying sqlcmd context is deleted. Best-effort: missing files or parse errors never fail the delete. JSONC comments and unrelated keys are preserved via hujson Patch.
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 2 comments.

Comment thread internal/tools/tool/vscode_windows.go Outdated
Comment thread internal/pal/clipboard_windows.go Outdated
Two security comments from Copilot review:

- clipExePath returned bare 'clip.exe' when SystemRoot was unset, which re-introduces the PATH/cwd search the comment said we were avoiding. Chain SystemRoot -> WINDIR -> SystemDrive\Windows before defaulting to an absolute C:\Windows\System32\clip.exe.

- vscodeWindowsBuildInfo built tier-3 install paths by joining USERPROFILE/ProgramFiles unconditionally; when either env var was empty, filepath.Join produced a relative path (e.g. AppData\...\Code.exe) that could match a binary in the working directory. Skip tier-3 entries whose base env var is empty.
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 2 comments.

Comment thread cmd/modern/root/open/vscode.go
Comment thread cmd/modern/root/open/ssms_run_windows.go
… context

Without a current context, both commands would call config.CurrentContext() (returning zero-value endpoint/user) and proceed to write an empty profile or launch with an empty host. Match start/stop/uninstall by exiting with 'No current context' and a hint to 'sqlcmd config get-contexts'.
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 3 comments.

Comment thread internal/tools/tool/vscode_linux.go
Comment thread internal/tools/tool/vscode_darwin.go Outdated
Comment thread cmd/modern/root/open/vscode.go
When HOME was unset, filepath.Join produced relative per-user paths (.local/bin/code, Applications/Visual Studio Code.app) that could match an unintended binary or directory in the working directory. Skip those entries when HOME is empty.
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 1 comment.

Comment thread cmd/modern/root/open/vscode.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

cmd/modern/root/open/ssms_test.go:35

  • This test mutates the global internal/config state but doesn’t reset it. Other tests in this package (e.g. vscode_test.go) also add an endpoint/context named "endpoint"/"context", and because config.AddEndpoint/AddContext uniquify names when duplicates exist, whichever test runs second can end up with mismatched names and panic. Add config.Clean() after TestSetup (or capture the actual endpoint/context names returned by the add helpers).

Comment thread cmd/modern/root/open/vscode_test.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 5 comments.

Comment thread cmd/modern/root/open/vscode.go
Comment thread internal/pal/clipboard_darwin.go
Comment thread cmd/modern/root/open/vscode_test.go
Comment thread cmd/modern/root/open/vscode_test.go
Comment thread cmd/modern/root/open/vscode_test.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated 1 comment.

Comment thread internal/pal/clipboard_linux.go
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 64 out of 76 changed files in this pull request and generated no new comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove ADS and add support for VSCode + MSSQL

3 participants